package cn.itcast.web.shiro;


import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;
import org.apache.shiro.crypto.hash.Md5Hash;

/**
 * 自定义凭证匹配器
 */
public class CustomCredentialsMatcher extends SimpleCredentialsMatcher{

    //执行密码匹配逻辑

    /**
     * @param token 封装用户输入的信息（用户名和密码）
     * @param info 封装了用户认证后的数据，包括用户登录对象，数据库的密码
     * @return true: 用户输入的和数据库的密码一致；false: 不一致
     */
    @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {

        //1. 获取用户输入的信息（用户名和密码）
        UsernamePasswordToken userToken = (UsernamePasswordToken)token;
        String email = userToken.getUsername();
        String password = new String(userToken.getPassword());

        //2.对用户输入的密码进行加盐加密
        /**
         * 参数一：原密码
         * 参数二：盐
         */
        Md5Hash md5Hash = new Md5Hash(password,email);
        String encodePwd = md5Hash.toString();

        //3.获取数据库的密码
        String dbPassword = (String)info.getCredentials();

        //4.判断加密加密后的密码 和 数据库的密码 是否一致
        return encodePwd.equals(dbPassword);
    }
}
